package com.relytosoft.mizar.media.display.services.service;

import cn.hutool.core.lang.tree.Tree;
import com.baomidou.mybatisplus.extension.service.IService;
import com.relytosoft.mizar.media.display.api.pojo.query.ChannelPlayDetailQuery;
import com.relytosoft.mizar.media.display.api.pojo.vo.VideoChannelVo;
import com.relytosoft.mizar.media.display.api.pojo.vo.VideoPlayVo;
import com.relytosoft.mizar.media.external.api.display.request.ManualVideoDto;
import com.relytosoft.mizar.media.external.api.display.request.ReplayTheaterDto;
import com.relytosoft.mizar.media.external.api.display.response.VideoClipInfoDto;

import java.util.List;
import java.util.Map;

/**
 * 视频查看
 *
 * @Author SunLi
 * @Date: 2022/4/18 13:44
 * @Version 1.0
 */
public interface VideoService extends IService<VideoChannelVo> {

    /**
     * 根据区域ID获取子区域及当前区域监控点
     *
     * @param districtId 区域ID
     * @param name       名称
     * @return
     */
    List<VideoChannelVo> selectVideoChannelList(Integer districtId, String name);

    /**
     * 根据区域ID获取子区域及当前区域监控点树
     *
     * @param videoChannelVoList
     * @return
     */
    List<Tree<Integer>> buildVideoChannelListTree(List<VideoChannelVo> videoChannelVoList);

    /**
     * 手动抓图
     *
     * @param channelIndexCode 第三方通道编号
     * @return
     */
    String manualCapture(String channelIndexCode);

    /**
     * 构件播放码流
     *
     * @param channelPlayDetailList
     * @return List<VideoPlayVo>
     * @author jgg
     */
    List<VideoPlayVo> buildPlayStreamUrl(List<ChannelPlayDetailQuery> channelPlayDetailList);

    /**
     * 构建录像回放
     *
     * @param replayTheaterDto 请求参数
     * @param channelId        回放通道id
     * @return http地址
     */
    VideoClipInfoDto buildReplayTheaterStreamUrl(ReplayTheaterDto replayTheaterDto, String channelId);


    /**
     * 手动录像
     *
     * @param manualVideoDto 手动录像参数
     * @return 录像任务ID
     */
    Map<String, String> manualVideo(ManualVideoDto manualVideoDto);

    /**
     * 停止手动录像
     *
     * @param map 需要停止得录像map集合
     * @return 是否停止
     */
    String stopManualVideo(List<Map<String, Object>> map);

    void closeStream(String playStreamKey);
}
